iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Modern Web

從 0 到 1:30 篇文章帶你玩轉 Electron 與 React系列 第 10

視窗 API 大集合(進階篇)

  • 分享至 

  • xImage
  •  

基於前一篇文章 視窗 API 大集合,這篇文章將繼續介紹更多 Electron 提供的視窗 API,讓開發者對 Electron 視窗管理 有更深入的理解。我們將涵蓋一些進階功能和較少提及的 API,幫助讀者實現更複雜的視窗控制和互動。

在 Electron 中,BrowserWindow 是管理視窗的核心類別。除了基本的視窗創建和操作外,Electron 還提供了很多進階的 API 來讓開發者更精細地控制視窗的行為和樣式。這篇文章將涵蓋更多視窗相關的 API,幫助你構建更強大的桌面應用。

進階視窗 API

1. setOpacity():設置視窗的不透明度

setOpacity() 方法允許你設置視窗的透明度,這對於打造一些特效視窗(如通知、提示窗口)非常有用。

mainWindow.setOpacity(0.8); // 設置視窗不透明度為 80%

你可以設置 0 到 1 之間的浮點數,其中 1 是完全不透明,0 是完全透明。

2. setIgnoreMouseEvents():忽略滑鼠事件

這個方法允許視窗忽略滑鼠事件,使滑鼠點擊穿透視窗。在開發透明視窗或桌面工具時非常實用。

mainWindow.setIgnoreMouseEvents(true); // 讓滑鼠點擊穿透視窗

你也可以傳入第二個參數 options 來設置點擊透明部分忽略,但不忽略可視內容的事件。

mainWindow.setIgnoreMouseEvents(true, { forward: true });

3. setContentProtection():啟用內容保護

當你希望保護視窗中的內容不被截圖或錄製時,setContentProtection() 方法會很有幫助。啟用此功能後,操作系統將阻止對此視窗內容的截圖或錄影。

mainWindow.setContentProtection(true); // 禁止截圖

4. setKiosk():啟用或退出 kiosk 模式

Kiosk 模式 是一種將應用鎖定在全螢幕且無法退出的模式。這在展示應用或公共終端機上很有用。

mainWindow.setKiosk(true);  // 啟用 kiosk 模式
mainWindow.setKiosk(false); // 退出 kiosk 模式

你可以通過 isKiosk() 來檢查視窗是否處於 kiosk 模式。

const isKioskMode = mainWindow.isKiosk();

5. setProgressBar():設置視窗的進度條

在某些桌面應用中,你可能需要顯示進度條來向用戶展示當前任務的進度,Electron 允許你設置視窗的進度條。

mainWindow.setProgressBar(0.5); // 設置視窗進度條為 50%

你可以設置一個 0 到 1 之間的數字來控制進度條的進度。設置 -1 會隱藏進度條。

6. flashFrame():閃爍視窗

flashFrame() 讓視窗在操作系統的任務欄上閃爍,用於提醒用戶應用中有重要事件發生。這在聊天應用或通知類型的應用中特別有用。

mainWindow.flashFrame(true);  // 開始閃爍
mainWindow.flashFrame(false); // 停止閃爍

7. setThumbarButtons():設置任務欄按鈕(Windows 特有)

Thumbar 按鈕 是指在 Windows 任務欄中顯示的小按鈕,用來直接操控應用中的一些功能(例如音樂播放器中的播放/暫停按鈕)。

mainWindow.setThumbarButtons([
  {
    icon: path.join(__dirname, 'play.png'),
    click: () => { console.log('播放'); },
    tooltip: '播放'
  },
  {
    icon: path.join(__dirname, 'pause.png'),
    click: () => { console.log('暫停'); },
    tooltip: '暫停'
  }
]);

8. setOverlayIcon():設置視窗的任務欄圖標(Windows 特有)

你可以在 Windows 任務欄的應用圖標上覆蓋一個小圖標,這通常用於提示應用狀態(例如訊息通知)。

mainWindow.setOverlayIcon(path.join(__dirname, 'overlay.png'), '新通知');

9. setFocusable():設置視窗是否可獲取焦點

當你希望某個視窗不能被聚焦(例如背景工具窗口),可以使用 setFocusable() 方法來禁用該視窗的聚焦行為。

mainWindow.setFocusable(false);  // 禁止獲取焦點
mainWindow.setFocusable(true);   // 允許獲取焦點

10. setMovable() / setResizable():設置視窗是否可移動或調整大小

你可以動態設置視窗是否可以移動或調整大小。這在某些應用場景中會比較實用,例如鎖定某些視窗以避免用戶誤操作。

mainWindow.setMovable(false);    // 禁止移動
mainWindow.setResizable(false);  // 禁止調整大小

相對的,還有 setMaximizable()setMinimizable(),用於控制視窗是否允許最大化或最小化。

mainWindow.setMaximizable(false); // 禁止最大化
mainWindow.setMinimizable(false); // 禁止最小化

11. setSkipTaskbar():跳過任務欄

當你希望某些視窗不出現在任務欄上,可以使用 setSkipTaskbar() 方法。

mainWindow.setSkipTaskbar(true);  // 隱藏任務欄圖標

12. setAutoHideMenuBar():自動隱藏選單欄

在某些應用中,你可能希望選單欄默認是隱藏的,只有當用戶按下 Alt 鍵時才顯示出來,這可以通過 setAutoHideMenuBar() 來實現。

mainWindow.setAutoHideMenuBar(true);  // 啟用自動隱藏

你也可以使用 setMenuBarVisibility() 來顯示或隱藏選單欄。

mainWindow.setMenuBarVisibility(false); // 隱藏選單欄

13. setVibrancy():設置視窗的背景模糊效果(macOS 特有)

在 macOS 中,setVibrancy() 可以讓你的視窗背景顯示出模糊的視覺效果,這在某些 macOS 應用中非常流行。

mainWindow.setVibrancy('light'); // 設置輕量模糊背景

你可以使用不同的模糊模式,如 lightdarkultra-dark

14. setShadow():設置視窗陰影(macOS 特有)

在 macOS 中,你可以使用 setShadow() 來控制視窗的陰影效果。

mainWindow.setShadow(true); // 開啟陰影
mainWindow.setShadow(false); // 關閉陰影

15. setWindowButtonVisibility():設置 macOS 視窗控制按鈕可視性

你可以使用 setWindowButtonVisibility() 來控制 macOS 視窗的關閉、最小化和最大化按鈕是否顯示。

mainWindow.setWindowButtonVisibility(false); // 隱藏按鈕

小結

這篇文章介紹了更多進階的 Electron 視窗 API,這些 API 讓讀者可以更靈活地管理視窗的外觀、行為和互動。從設置不透明度、忽略滑鼠事件,到啟用內容保護、添加進度條、設置任務欄按鈕等,這些功能可以打造更加豐富和個性化的桌面程式。

透過掌握這些進階 API,你可以實現多樣化的功能,如通知功能、小工具等。

充分利用這些工具,能夠使 Electron 程式更具吸引力與實用性。


上一篇
視窗 API 大集合
下一篇
使用 Node.js 操作本地文件系統
系列文
從 0 到 1:30 篇文章帶你玩轉 Electron 與 React12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言